#include<iostream>

class Car//抽象产品
{
    public:
        virtual void show()=0;
};

class BMW:public Car
{
public:
    BMW(int a){}
    void show()
    {
        std::cout<<"一辆宝马\n";
    }
};

class Benz:public Car
{
public:
  Benz(double b){}
  void show()
    {
        std::cout<<"一辆奔驰\n";
    }
};
class Audi:public Car
{
public:
  Audi(char c){}
  void show()
    {
        std::cout<<"一辆奥迪\n";
    }
};
class Factory//工厂类：负责生产具体的产品
{
    public:
        Car *CreateBMW()
        {
            return new BMW(1);
        }
        Car *CreateBenz()
        {
            return new  Benz(3.14);
        }
        Car *CreateAudi()
        {
            return new Audi('e');
        }
};

int main()
{

    // Car *c=new Benz;//不在关心对象构建的方式
    Factory f;
    Car *c=f.CreateBenz();
    c->show();




    return 0;
}